//
// Created by ftd on 2021/8/18.
// 该类主要负责处理网络消息事件响应
//

#ifndef DEMO_NET_MSG_EVENT_HANDLE_H
#define DEMO_NET_MSG_EVENT_HANDLE_H
#include <functional>
#include <atomic>
#include <chrono>
#include "protocol/protocol.h"

using EventHandleFunc = std::function<bool(void*, int)>;

class NetMsgEventHandle {
public:
    ~NetMsgEventHandle();
    NetMsgEventHandle(const NetMsgEventHandle&) = delete;
    NetMsgEventHandle& operator= (const NetMsgEventHandle&) = delete;
    static NetMsgEventHandle& Instance();
    // 注册网络消息事件处理函数
    void RegisterEventHandle();
    // 网络消息事件处理
    bool EventHandle(int msg_id, void* msg, int msg_size);

    void Update();
private:
    NetMsgEventHandle();

    // 开房间操作
    bool HandleOpenRoomOperate(void* msg, int msg_size);
    // 修改房间操作
    bool HandleModifyRoomOperate(void* msg, int msg_size);
    // 重启房间操作
    bool HandleRestartRoomOperate(void* msg, int msg_size);
    // 删除房间操作
    bool HandleDeleteRoomOperate(void* msg, int msg_size);
    // 关闭房间操作
    bool HandleCloseRoomOperate(void* msg, int msg_size);

    // 网络消息事件处理函数指针
    EventHandleFunc event_handle_funcs_[kMsgIdCnt];

    std::atomic<int64_t> total_event_handle_cnt_;
};


#endif //DEMO_NET_MSG_EVENT_HANDLE_H
